package com.example.yingpianguangli.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Objects;
@Data // 提供所有的getter和setter, equals, canEqual, hashCode 和 toString 方法
@NoArgsConstructor // 提供无参构造函数
@AllArgsConstructor // 提供全参构造函数
/**
 * 场次实体类
 */
public class SysSession implements Serializable {

    /**
     * 序列化ID，用于序列化兼容性
     */
    private static final Long serialVersionUID = 1L;

    /**
     * 场次编号
     */
    private Long sessionId;

    /**
     * 影厅编号，规定场次必须关联一个影厅
     */
    @NotNull(message = "场次所在影厅不能为空")
    private Long hallId;

    /**
     * 该场次语言版本，确保电影语言信息明确
     */
    @NotBlank(message = "场次电影语言版本不能为空")
    private String languageVersion;

    /**
     * 电影编号，确保场次安排的电影明确
     */
    @NotNull(message = "场次安排电影不能为空")
    private Long movieId;

    /**
     * 播放时间，采用本地时间格式
     */
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "HH:mm")
    private String playTime;

    /**
     * 结束时间，采用本地时间格式
     */
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "HH:mm")
    private String endTime;

    /**
     * 截止时间，此时间之前不可删不可改电影、影厅信息
     */
    private String deadline;

    /**
     * 场次日期，确保每个场次日期明确
     */
    @NotNull(message = "场次日期不能为空")
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
    private LocalDate sessionDate;

    /**
     * 场次票价，确保票价非负
     */
    @NotNull(message = "场次票价不能为空")
    @Size(min = 0, message = "场次票价不能为负数")
    private Double sessionPrice;

    /**
     * 场次提示，用于提供额外的场次信息
     */
    private String sessionTips;

    /**
     * 场次座位信息，确保每个场次的座位布局明确
     */
    @NotBlank(message = "场次座位信息不能为空")
    private String sessionSeats;

    /**
     * 座位总数
     */
    private Integer seatNums;

    /**
     * 已售座位数
     */
    private Integer sallNums;

    /**
     * 关联的影厅对象
     */
    private SysHall sysHall;

    /**
     * 关联的电影对象
     */
    private SysMovie sysMovie;

}

